import org.junit.Test;
import junit.framework.TestCase;

public class TestePessoa extends TestCase {
	Pessoa pessoa;

	public void setUp() throws Exception {
		pessoa = new Pessoa("Joao", "123", "ufcg", "Funcionario", "12345678901", "rg", "endereco", "fone");
	}

	public void testConstrutorPessoa() throws Exception {
		Pessoa pessoa1 = new Pessoa("Marcos", "Funcionario", "12345678901", "endereco", "fone");
		assertEquals("construtor 1", "Marcos", pessoa1.getNome());
		Pessoa pessoa2 = new Pessoa("Alex", "Outro", "12345678901", "endereco", "fone");
		assertEquals("construtor 1", "Alex", pessoa2.getNome());
		
		Pessoa pessoa3 = new Pessoa("Antonio", "222", "Funcionario", "12345678901", "endereco", "fone");
		assertEquals("construtor 2 nome", "Antonio", pessoa3.getNome());
		assertEquals("construtor 2 matricula", "222", pessoa3.getMatricula());
		Pessoa pessoa4 = new Pessoa("Alex", "111", "Outro", "12345678901", "endereco", "fone");
		assertEquals("construtor 2 nome", "Alex", pessoa4.getNome());
		assertEquals("construtor 2 matricula", "111", pessoa4.getMatricula());
		
		try {
			Pessoa pessoa5 = new Pessoa("1Joao", "Funcionario", "12345678901", "endereco", "fone");
			Pessoa pessoa6 = new Pessoa("Jo1ao", "Funcionario", "12345678901", "endereco", "fone");
			Pessoa pessoa7 = new Pessoa("Joao1", "Funcionario", "12345678901", "endereco", "fone");
			fail("Esperava-se uma excecao de nome invalido");
		} catch (Exception e) {
			assertEquals("Nome invalido", "Nome nao pode conter numeros", e.getMessage());
		}

		try {
			Pessoa pessoa6 = new Pessoa("Jose", "Funcionario", "cpf", "endereco", "fone");
			Pessoa pessoa7 = new Pessoa("Jose", "Funcionario", "123456789012", "endereco", "fone");
			Pessoa pessoa8 = new Pessoa("Jose", "Funcionario", "12a45678901", "endereco", "fone");
			fail("Esperava-se uma excecao de cpf invalido");
		} catch (Exception e) {
			assertEquals("cpf invalido", "cpf so pode conter 11 numeros", e.getMessage());
		}
		
		try {
			Pessoa pessoa6 = new Pessoa("", "", "", "", "");
			fail("Esperava-se uma excecao de nome vazio");
		} catch (Exception e) {
			assertEquals("Nome vazio", "Nome nao pode ser vazio", e.getMessage());
		}

		try {
			Pessoa pessoa7 = new Pessoa(null, null, null, null, null);
			fail("Esperava-se uma excecao de nome nulo");
		} catch (Exception e) {
			assertEquals("Nome nulo", "Nome nao pode ser nulo", e.getMessage());
		}

		try {
			Pessoa pessoa8 = new Pessoa("Joao", "123", "ufcg", "xxx", "12345678901", "rg", "endereco", "fone");
			fail("Esperava-se uma excecao de nome nulo");
		} catch (Exception e) {
			assertEquals("Tipo invalido", "tipo so pode ser Funcionario ou Outro", e.getMessage());
		}
		
		pessoa = null;
	}
	
	public void testGetNome() {
		assertEquals("get nome com erro", "Joao", pessoa.getNome());
		pessoa = null;
	}
	
	public void testSetNome() {
		pessoa.setNome("Jose");
		assertEquals("set nome com erro", "Jose", pessoa.getNome());
		pessoa = null;
	}

	public void testGetMatricula() {
		assertEquals("get matricula com erro", "123", pessoa.getMatricula());
		pessoa = null;
	}
	
	public void testSetMatricula() {
		pessoa.setMatricula("000");
		assertEquals("set matricula com erro", "000", pessoa.getMatricula());
		pessoa = null;
	}
	
	public void testGetTipo() {
		assertEquals("get tipo com erro", "Funcionario", pessoa.getTipo());
		pessoa = null;
	}
	
	public void testSetTipo() {
		pessoa.setTipo("Outros");
		assertEquals("set tipo com erro", "Outros", pessoa.getTipo());
		pessoa = null;
	}
	
	public void testGetCpf() {
		assertEquals("get cpf com erro", "12345678901", pessoa.getCpf());
		pessoa = null;
	}
	
	public void testSetCpf() throws Exception {
		pessoa.setCpf("10987654321");
		assertEquals("set cpf com erro", "10987654321", pessoa.getCpf());
		pessoa = null;
	}
	
	public void testGetRg() {
		assertEquals("get rg com erro", "rg", pessoa.getRg());
		pessoa = null;
	}
	
	public void testSetRg() {
		pessoa.setRg("10987654321");
		assertEquals("set rg com erro", "10987654321", pessoa.getRg());
		pessoa = null;
	}
	
	public void testGetEndereco() {
		assertEquals("get endereco com erro", "endereco", pessoa.getEndereco());
		pessoa = null;
	}
	
	public void testSetEndereco() {
		pessoa.setEndereco("end");
		assertEquals("set departamento com erro", "end", pessoa.getEndereco());
		pessoa = null;
	}
	
	public void testGetFone() {
		assertEquals("get fone com erro", "fone", pessoa.getFone());
		pessoa = null;
	}
	
	public void testSetFone() {
		pessoa.setFone("12345678");
		assertEquals("set departamento com erro", "12345678", pessoa.getFone());
		pessoa = null;
	}
	
	@Test
	public void testGetStatus() {
		assertEquals("get Status com erro", true, pessoa.getStatus());
		pessoa = null;
	}
	
	@Test
	public void testSetStatus() {
		pessoa.setStatus(false);
		assertEquals("set Status com erro", false, pessoa.getStatus());
		pessoa = null;
	}
}
